let readline = require("readline-sync");
// 1.系统随机生成不重复的4位数字
function systemNumber() {
    let arr = [];
    for (let i = 0; i < 4; i++) {
        let num = parseInt(Math.random() * 10); //随机生成0-9之间的数字
        // 判断数组中是否已经包含该数字，如果有就应该重新生成一个数字，不应该直接插入到数组中
        if (arr.includes(num)) {
            i--;
        } else {
            arr.push(num);
        }
    }
    return arr;
}
// 2.生成制定范围的随机数：20-50之间的随机数
function randomNum(min,max){
    let num=parseInt(Math.random()*(max-min+1)+min);
    return num;

}

// 主函数：用于控制流程
function main() {
    let words=["加油！","努力！","还差一点了！","坚持就是胜利！","太棒了！","666！","珍惜剩下的机会！"];
    // 1.系统随机生成不重复的4位数字
    let computerNumber = systemNumber();
    console.log(computerNumber);
    // 2.用户在10次机会中猜测系统生成的数字
    let count = 10; //游戏机会
    while (count) {
        // 3.用户输入不重复的4位数字
        console.log("请输入猜测的不重复的四位数字：");
        let userNumber = readline.question("");
        // 4.判断用户输入的数字是否符合游戏要求
        // 判断字符串长度
        if (userNumber.length == 4) {
            // 判断字符串是否是纯数字的字符串
            if (!isNaN(userNumber)) {
                //判断数字是否重复   1122  1223
                let s = new Set([...userNumber]);
                // 判断集合的长度，长度为4表示没有重复数字
                if (s.size == 4) {
                    // 5.用户输入的数字符合游戏要求之后，再去和系统生成的数字进行匹配
                    // 6.首先匹配数字和位置是否正确：xA  位置通过下标匹配，下标相等，下标所对应的数字相等
                    // 7.再匹配只是数字相等的情况：xB
                    let a = 0,
                        b = 0;
                    for (let i = 0; i < computerNumber.length; i++) {
                        for (let j = 0; j < userNumber.length; j++) {
                            if (i == j && computerNumber[i] == userNumber[j]) {
                                a++;
                            } else if (computerNumber[i] == userNumber[j]) {
                                b++;
                            }
                        }
                    }
                    count--; //游戏次数减一

                    // 9.4A的时候，表示用户获胜，直接退出循环，输出用户获胜信息
                    if (a == 4) {
                        console.log("恭喜您！游戏获胜！");
                        // 结束游戏
                        // 方法一:
                        // count=0;//不满足循环条件
                        // 方法二：
                        // break;//强制退出循环
                        // 方法三：
                        return;//结束整个函数

                    } else {
                        // 8.输出提示信息：xAxB,您还剩下几次机会！
                        let num = randomNum(0,words.length-1); //随机生成0-9之间的数字
                        console.log(`${a}A${b}B，您还剩下${count}次机会！${words[num]}`);
                    }
                    if(count<=3 && count>0){
                        console.log("您是否需要提示信息?（Y/N）");
                        let userChoice=readline.question("");
                        if(userChoice=="Y" || userChoice=="y"){
                            if(count==3){
                                console.log(`${computerNumber[0]}XXX`);

                            }else if(count==2){
                                console.log(`${computerNumber[0]}${computerNumber[1]}XX`);

                            }else if(count==1){
                                console.log(`${computerNumber[0]}${computerNumber[1]}${computerNumber[2]}X`);

                            }
                        }else{
                            console.log("您继续加油！");
                        }
                    }


                } else {
                    console.log("请输入不重复的数字！");
                }

            } else {
                console.log("请输入纯数字！");
            }

        } else {
            console.log("请输入4位数字！");
        }


    }
}
main();


// 程序会随机生成4个不重复的数字，用户猜测是哪四个数字，10次机会之内猜出，用户获胜

// 程序生成：4729
// 用户猜测：4132  1A1B

// xA：表示数字正确，位置也正确
// xB：表示数字正确，但是位置不正确

// 步骤：












// 10.当次数为0时，表示用户失败，程序结束


// 随机数：
// let a=Math.random();//随机生成0-1之间的数字，可以取到0，但是不能取到1
// console.log(parseInt(a*10));



//  最小值：              0*31+20=20
// 最大值：               0.99*31+20=30.69+20=50.69=50
